iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0

上一天教大家如何取得資料中的userid,這天教大家如何發送訊息給使用者

以下列表為所有支援的訊息種類

種 類 參數
Text message (type, text, emojis, emojis.index, emojis.productId, emojis.emojiId)
Sticker message (type, packageId, stickerId)
Image message (type, originalContentUrl, previewImageUrl)
Video message (type, originalContentUrl, previewImageUrl, trackingId)
Audio message (type, originalContentUrl, duration)
Location message (type, title, address, latitude, longitude)
Imagemap message (type, baseUrl, altText, baseSize.width, baseSize.height, video.originalContentUrl, video.previewImageUrl, video.area.x, video.area.y, video.area.width, video.area.height, video.externalLink.linkUrl, video.externalLink.label, actions)
Template message (type, altText, template)
Flex message (type, altText, contents)

詳細可以到官方網站查看,那邊會有更詳細的講解。


為了方便執行,請在函式內新增幾行程式碼

from linebot.models import *
.
.
.
@app.route("/", methods=['POST'])
def get_reply():
    try:
        api = LineBotApi('<你的channel access token>')
        handler = WebhookHandler('<你的<channel secret>>')
        userid = "<從終端機中取得的用戶ID>"

這邊Demo幾個常用的

Textmessage

api.push_message(userid, TextSendMessage(text="<你想說的話>"))

結果如下圖

若想要在文字中插入emoji也可以這樣寫

emoji_index = []

emoji_replace_1 = {
    "index": 0,
    "productId": "5ac21a8c040ab15980c9b43f",
    "emojiId": "053"
}

emoji_replace_2 = {
    "index": 2,
    "productId": "5ac21a8c040ab15980c9b43f",
    "emojiId": "054"
}

emoji_replace_3 = {
    "index": 4,
    "productId": "5ac21a8c040ab15980c9b43f",
    "emojiId": "055"
}

emoji_index.append(emoji_replace_1)
emoji_index.append(emoji_replace_2)
emoji_index.append(emoji_replace_3)

api.push_message(userid, TextSendMessage(text="$ $ $", emojis=emoji_index))

這邊可能比較難理解,一開始我們定義一個變數叫"emoji_index"用來存放我們需要取代文字的資料,底下我們定義了三個字典,內部的key意思如下所示

  • "index" -> 我們需要取代的文字的「索引位置」,且該文字必須被取代為"$"符號,範例中的"$ $ $"分別代表我們text傳送第'0', '2', '4'個位置。
  • productId -> 可至說明文件中複製
  • emoji -> 可至說明文件中複製
  • 範例圖:
    https://ithelp.ithome.com.tw/upload/images/20230924/20146555JYErnH9UcV.png

都放入變數"emoji_index"後在push_message中新增emojis=emoji_index即可

Stickermessage

這應該算是最簡單的

api.push_message(userid, StickerSendMessage(package_id=1070, sticker_id=17842))

詳細設定也可至官方文件中複製id

Imagemessage

這個限制就比較多了

  • 傳送的圖片只能是網址,且只能是https
  • 預覽圖不能超過1MB,大概是1024x1024的大小

雖然條件少,但要得達成上述的條件也不容易,而且不能傳本地的圖片真的是無言......

api.push_message(userid, ImageSendMessage(original_content_url="https://megapx-assets.dcard.tw/images/9628e1ab-ee4b-4ba6-83e3-e42164b056ce/640.webp", preview_image_url="https://megapx-assets.dcard.tw/images/9628e1ab-ee4b-4ba6-83e3-e42164b056ce/640.webp"))

上一篇
[Day 13] LineBot 取得用戶資訊
下一篇
[Day 15] Day8 ~ 13複習
系列文
用30天打好Python、LineBot的基礎&基本應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言